package modulo1.cci;

import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import modulo1.cdp.Aluno;
import modulo1.cdp.EnumEstadoTurma;
import modulo1.cdp.Matricula;
import modulo1.cdp.Turma;
import modulo1.cgt.CadastroInternoApl;
import modulo1.cgt.ControleTurmaMatriculaApl;

@WebServlet(name = "MatriculaCtrl", urlPatterns = {"/Matricula"})
public class MatriculaCtrl extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        RequestDispatcher cih = request.getRequestDispatcher("modulo1/conturmat/matricula_cadastro.jsp");
        cih.forward(request, response);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String evento = request.getParameter("evento");
        if (evento != null) {
            if (evento.equals("inserir_aluno")) {
                try {
                    Turma turma = ControleTurmaMatriculaApl.getInstance().turmaConsultar(Long.parseLong(request.getParameter("id_turma")));
                    List<Aluno> alunos = CadastroInternoApl.getInstance().alunoBuscarTurmaAptos(turma);
                    List<Aluno> alunosMatriculados = CadastroInternoApl.getInstance().alunoBuscarTurmaMatriculado(turma);
                    request.setAttribute("alunos", alunos);
                    request.setAttribute("turma", turma);
                    request.setAttribute("alunosMatriculados", alunosMatriculados);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } else if (evento.equals("inserir_aluno_turma")) {
                try {
                    Turma turma = ControleTurmaMatriculaApl.getInstance().turmaConsultar(Long.parseLong(request.getParameter("turma")));
                    Aluno aluno = CadastroInternoApl.getInstance().alunoConsultar(Long.parseLong(request.getParameter("aluno")));
                    String mensagem;
                    Matricula matricula;
                    if (request.getParameter("acao").equals("incluir")) {
                        matricula = new Matricula();
                        matricula.setTurma(turma);
                        matricula.setAluno(aluno);
                        ControleTurmaMatriculaApl.getInstance().matricular(matricula);
                        mensagem = "Aluno matriculado com sucesso.";
                    } else {
                        matricula = ControleTurmaMatriculaApl.getInstance().matriculaConsultar(turma, aluno);
                        ControleTurmaMatriculaApl.getInstance().desmatricular(matricula);
                        mensagem = "Aluno desmatriculado com sucesso.";
                    }
                    response.sendRedirect("Matricula?evento=inserir_aluno&id_turma=" + turma.getId() + "&mensagem=" + mensagem);
                    return;
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            RequestDispatcher cih = request.getRequestDispatcher("modulo1/conturmat/matricula_form.jsp");
            cih.forward(request, response);
            return;
        }

        String buscar = request.getParameter("buscar");
        try {
            List<Turma> turmas;
            if (buscar != null) {
                turmas = ControleTurmaMatriculaApl.getInstance().turmaBuscarAno(Integer.parseInt(buscar));
            } else {
                turmas = ControleTurmaMatriculaApl.getInstance().turmaBuscarAberta();
            }
            request.setAttribute("turmas", turmas);
        } catch (Exception ex) {
            // TODO Exceção buscar turma
        }

        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        processRequest(request, response);
    }
}
